第55篇:日志分析神器Splunk的介绍与使用|大数据分析|智能运维|业务分析
Part1 前言
大家好,我是ABC_123。我曾经花费时间搭建各种Web服务器、数据库环境去研究分析日志,使用的工具从使用系统自带命令去分析日志,到自动化的360星图,再到后期的Logparser、ELK(ElastiSearch、Kibana、Logstash)等等。到最后我发现还是Splunk这款商业版工具用起来更顺手一些,我个人认为这款软件比ELK要好用得多,只不过ELK免费开源可以包装成产品,所以受到大家追捧,反之Splunk价格昂贵,推广就很受限制。把Splunk用好了足以应付现有的各种日志分析场景,堪称一款神器。
Splunk这款商业工具是美国人写的(ELK也是美国人做的),于2004年开始研发更新,可以将设备和软件产生的日志数据、性能数据、网络数据包等数据进行采集,然后进行索引、调查、监控、可视化等,当然也可以使用它辅助蓝队日志分析工作,很多用户也用它来做产品营销分析,新版的Splunk还可以结合先前的数据对未来一段时间内的客户访问量进行预测。
欢迎关注我的公众号"ABC123安全研究实验室",99%原创,不发水文,不发广告。
Part2 Splunk使用介绍
Splunk的搜索语法
接下来简单介绍一下Splunk的搜索语法:
支持布尔运算符(AND/OR/NOT),必须是大写
status=200 NOT action=purchase
status=200 action!=purchase
500 select 查找包含"500"和"select"字样的所有事件
500 sel* 查找包含"500"和"sel"开头单词的所有事件
status=500 使用=返回准确结果
head n //返回前n个
tail n //返回后n个
top //显示字段最常见/出现次数最多的值
rare //显示字段出现次数最少的值
limit //限制查询,如:limit 5,限制结果的前5条
rename xx as zz //为xx字段设置别名为zz,多个之间用 ,隔开
fields //保留或删除搜索结果中的字段。fiels – xx 删除xx字段,保留则不需要 – 符号
stats count() 括号中可以插入字段,主要对事件进行计数
stats dc() distinct count,去重之后对唯一值进行统计
stats values() 去重复后列出括号中的字段内容
stats avg() 求平均值
如下图所示,这张图是从很老的一个ppt中改的,可以很直观看到Splunk的界面及使用方法。
以下是Splunk的仪表板界面的示例,在这个界面中,蓝队分析人员可以将各种日志分析的分析图表汇总在一起,展示出来非常直观漂亮。
导入日志文件
Splunk导入日志文件的方法有很多,我比较习惯用以下方式导入日志,具体操作如下:设置-->数据输入--> 文件和目录-->新本地文件和目录
然后点击“文件或目录”旁边的“浏览”按钮,选择一个本机的一个文件夹,比如说c:\log111
后续只要把需要分析的日志文件,放到此文件夹中,Splunk会自动进行导入。
在上述文件夹中放置好日志文件之后,打开Splunk的主界面,中间有一排绿色的柱状图,显示了每个时间段的Web访问次数,这里需要重点关注的是柱状图中突然出现的很高的柱状部分,极有可能是攻击者进行频繁操作的时间段。
如果需要对指定的日志文件进行日志分析,则只需要输入以下命令即可:source="C:\\log1111\\45_secure.txt"
分析SQL注入脱数据行为
使用如下语句,可以快速检索SQL注入攻击行为,为了减少误报,可以配合使用AND语句拼接IISCode!=404,排除响应码为404的搜索结果。如下图所示,结合柱状图可以知道,SQL注入攻击主要集中在柱状图所示的一个小时左右的时间段内,推测攻击者发现了sql注入漏洞,并实施了攻击。这里仅用了一个select关键字,因为攻击者想要使用sql注入漏洞去脱数据的话,select关键字几乎是必用的。
index=_* OR index=* sourcetype="SQL_Injectionex" select AND iisCode!=404
分析XSS攻击行为
使用如下语句,可以快速分析XSS攻击行为,通过逻辑运算符AND筛选响应码为200的日志结果,Splunk可以支持<、>等标签字符的分析,使用的时候需要把关键词加上双引号。
index=_* OR index=* sourcetype="SQL_Injectionex" "<script>" OR "alert" OR "confirm" AND iisCode=200
结合Splunk的柱状图可以知道,XSS攻击行为集中在如柱状图所示的1个小时时间段内。
网站缓慢响应原因分析
客户当时发现内网的一个Web服务器每到下午13点开始就访问特别卡,通过Splunk的日志分析结果发现,大约有一个小时左右的峰值访问(如图示中的1 hour),而且访问的url几乎都是/shop/rexsearch.asp路径,猜想是频繁访问搜索功能,造成了服务器负载过重。
接下来对/shop/rexsearchp.asp访问次数进行统计,发现是2万2418次POST请求,只有2次GET请求。
这个案例后续有时间再给大家详细讲一讲,最后发现是内网的一个漏洞扫描器造成的,每到下午13点,就会自动对此Web服务器进行漏洞扫描,扫描器对search页面的频繁探测,造成了服务器负载过重。
分析SSH密码爆破事件
如下图所示,为了分析SSH口令枚举事件,直接在搜索框中填入“authentication”关键字,Splunk分析完毕后给出了一个柱状图,每个柱状图代表1分钟内的SSH口令攻击次数。根据Splunk的柱状图并适当调整时间轴长度,可以直观看到,该日志中暴力破解SSH密码行为主要集中在12点21分到12点22分这一分钟内,攻击者进行了总共5万1158次密码枚举操作。
table表格展示命令
通过table命令,可以将Splunk的检索结果整理成表格格式,而且可以自定义表格每一列字段的标题,更可贵的是Splunk的搜索语句支持中文,可以设置中文标题。
source="C:\\log1111\\45_secure.txt" authentication|rename rhost as 攻击源IP | stats count as "源IP攻击次数" by 攻击源IP | table 攻击源IP 源IP攻击次数 | sort - 源IP攻击次数
如下图所示,可以直接对搜索结果进行保存,也可以把恶意IP直接导出来,非常方便。
提取ip地址字段
接下来我们需要统计一下攻击者使用了哪些源IP地址,因此我们要从日志中把源IP地址作为一个字段提取出来,Splunk很方便地给我们提供了提取字段的功能,看接下来的操作:
首先点击“提取新字段”按钮,选中一行日志作为样本进行字段的分析与提取。
接下来点击“下一步”,选中“正则表达式”按钮。
接下来来到“选择字段”功能下,用鼠标左边拖拉选中一个ip地址,Splunk会为我们自动生成正则表达式,这里给该字段起名字叫做secureIP。
添加完成之后,发现Splunk自动给我们做好了正则表达式语句,可以根据需要进行修改。
接下来输入查询语句 "authentication"| top secureRhost | sort - secureRhost,可以直观看到哪些ip地址爆破次数最高。这里需要注意管道字符|的用法,左侧输出,右侧输入。
接下来以图表形式展示ip地址的分布,输入命令 "authentication"| iplocation secureRhost | geostats count by secureRhost globallimit=0 ,可以看到,攻击者很有可能动用了僵尸网络或者是代理池在一分钟左右的时间里,进行了6万多次的账号枚举操作。
iplocation命令的使用
输入该命令可以自动增加City、Country、Region、lat、lon等字段,将日志中的IP地址对应的国家、地区、经纬度等信息进行展示,非常方便。
source="C:\\log1111\\45_secure.txt" authentication |stats count by rhost | iplocation rhost | search Country!="China"
仪表板的图示展示功能
通过Splunk可以将各种分析图表汇总到“仪表板”上进行展示,以下是我做的一个展示,将3个分析图表汇总到一个界面中,具体使用方法后续再讲。
Part3 总结
1. Splunk功能非常繁杂,一篇文章很难把Splunk讲清楚,后续ABC_123还会继续分享Splunk这款日志分析神器的使用方法,也会出一个视频教程,敬请期待。
2. 关注公众号回复“2022”,即可得到“2022年ABC123公众号年刊”的PDF电子书下载地址。